package pfc.aviloc.aplicacion.enfermedades;

import java.io.IOException;

import pfc.aviloc.R;
import pfc.aviloc.comunicacion.Comunicacion;
import pfc.aviloc.configuracion.ConfiguracionPreferenceActivity;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;

public class EnfermedadesModificarActivity extends Activity {
		
	// *******************************
	// Variables
	// *******************************
	private Button botonEVolver;
	private Button botonEModificar;
	
	private TextView formulario_enfermedad_fecha_inicio;
	private int ano_fecha_inicio;
	private int mes_fecha_inicio;
	private int dia_fecha_inicio;
	static final int DATE_DIALOG_FECHA_INICIO_ID = 0;

	private TextView formulario_enfermedad_fecha_fin;
	private int ano_fecha_fin;
	private int mes_fecha_fin;
	private int dia_fecha_fin;
	static final int DATE_DIALOG_FECHA_FIN_ID = 1;
	
	// *******************************
	// Metodos
	// *******************************	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//Log.i("INFO", "--<-<-<-<--< 1");
		setContentView(R.layout.enfermedades_modificar_enfermedad_xml);
			
		botonEVolver  = (Button) findViewById(R.id.e_modificar_boton_volver_id);
		botonEModificar  = (Button) findViewById(R.id.e_modificar_boton_modificar_enfermedad_id);
		
		botonEVolver.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(EnfermedadesModificarActivity.this, EnfermedadesActivity.class);
				startActivity(intent);
				finish();
			}
		});
		botonEModificar.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				
		 		if (comprobarConexion()) {
		 			boolean datosEnviados = enviarDatosEnfermedadServidor();
		 		} else {
		 			boolean datosEnviosAlmacenados = almacenarEnvioDatosEnfermedad();
		 		}
		 		
				Intent intent = new Intent();
				intent.setClass(EnfermedadesModificarActivity.this, EnfermedadesActivity.class);
				startActivity(intent);
				finish();
			}
		});
		
		formulario_enfermedad_fecha_inicio = (TextView) findViewById(R.id.e_modificar_enfermedad_fecha_inicio_id);
		formulario_enfermedad_fecha_inicio.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				showDialog(DATE_DIALOG_FECHA_INICIO_ID);	
				return false;
			}
		});
		
		formulario_enfermedad_fecha_fin = (TextView) findViewById(R.id.e_modificar_enfermedad_fecha_fin_id);
		formulario_enfermedad_fecha_fin.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				showDialog(DATE_DIALOG_FECHA_FIN_ID);	
				return false;
			}
		});
		
        Bundle bundle=getIntent().getExtras();
        String idEnfermedad = bundle.getString("id_enfermedad");
		// recuperamos los datos de la base de datos. 
		Enfermedades enfermedad= obtenerEnfermedadBD(idEnfermedad);
		ano_fecha_inicio = new Integer(enfermedad.getFechaInicioAno());
		mes_fecha_inicio = (new Integer(enfermedad.getFechaInicioMes()))-1;
		dia_fecha_inicio = new Integer(enfermedad.getFechaInicioDia());
		ano_fecha_fin = new Integer(enfermedad.getFechaFinAno());
		mes_fecha_fin = (new Integer(enfermedad.getFechaFinMes()))-1;
		dia_fecha_fin = new Integer(enfermedad.getFechaFinDia());
		
		mostrarDatosEnfermedad(enfermedad);

	}
	
	private void mostrarDatosEnfermedad(Enfermedades datosEnfermedad){		
		//********************************
		// Variables
		// *******************************
		EditText textViewNombre = (EditText) findViewById(R.id.e_modificar_enfermedad_nombre_id);
		EditText textViewDescripcion = (EditText) findViewById(R.id.e_modificar_enfermedad_descripcion_id);
		EditText textViewFechaInicio = (EditText) findViewById(R.id.e_modificar_enfermedad_fecha_inicio_id);
		EditText textViewFechaFin = (EditText) findViewById(R.id.e_modificar_enfermedad_fecha_fin_id);
		
		textViewNombre.setText(datosEnfermedad.getNombre());
		textViewDescripcion.setText(datosEnfermedad.getDescripcion());
		textViewFechaInicio.setText(datosEnfermedad.getFechaInicio());
		textViewFechaFin.setText(datosEnfermedad.getFechaFin());
	}
	
	private Enfermedades obtenerEnfermedadBD(String idEnfermedad){
		EnfermedadesBD eBD = new EnfermedadesBD(this, this.getString(R.string.e_bd_nombre_base_datos), null, this.getResources().getInteger(R.integer.e_bd_version));
		Enfermedades datos = eBD.recuperarBD(idEnfermedad);
		
		return datos;
	}
	
	private void insertarFechaInicioEnFormulario() {
	    formulario_enfermedad_fecha_inicio.setText(
	        new StringBuilder()
	        //Constant Month is 0 based so we have to add 1
	       .append(dia_fecha_inicio).append("-")
	       .append(mes_fecha_inicio+1).append("-")
	       .append(ano_fecha_inicio).append(" "));
	}
	private DatePickerDialog.OnDateSetListener mDateFechaInicioSetListener = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker view, int yearOf, int monthOfYear, int dayOfMonth) {
	            ano_fecha_inicio = yearOf;
	            mes_fecha_inicio = monthOfYear;
	            dia_fecha_inicio = dayOfMonth;
	            insertarFechaInicioEnFormulario();//Show the date on the TextView
	     }
	};
	
	private void insertarFechaFinEnFormulario() {
	    formulario_enfermedad_fecha_fin.setText(
	        new StringBuilder()
	        //Constant Month is 0 based so we have to add 1
	       .append(dia_fecha_fin).append("-")
	       .append(mes_fecha_fin+1).append("-")
	       .append(ano_fecha_fin).append(" "));
	}
	private DatePickerDialog.OnDateSetListener mDateFechaFinSetListener = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker view, int yearOf, int monthOfYear, int dayOfMonth) {
	            ano_fecha_fin = yearOf;
	            mes_fecha_fin = monthOfYear;
	            dia_fecha_fin = dayOfMonth;
	            insertarFechaFinEnFormulario();//Show the date on the TextView
	     }
	};
		
	@Override
	protected Dialog onCreateDialog(int id) {
	    switch (id) {
	         case DATE_DIALOG_FECHA_INICIO_ID:
	             return new DatePickerDialog(this, mDateFechaInicioSetListener, ano_fecha_inicio, mes_fecha_inicio, dia_fecha_inicio);
	         case DATE_DIALOG_FECHA_FIN_ID:
	        	 return new DatePickerDialog(this, mDateFechaFinSetListener, ano_fecha_fin, mes_fecha_fin, dia_fecha_fin);
	     }
	     return null;
	}
		
	private boolean enviarDatosEnfermedadServidor(){
		// TODO: esta funcion va a recuperar los datos del formulario y los enviara al servidor
		return false;
		/*
		DatosPersonales returnDatos = null;
		InputSource respuestaXMLInputSource = null;
		
		try {
			//Comunicacion.inicializarComunicacion(this.getResources().getInteger(R.integer.TIME_OUT_COMUNICACION));
	//			res = Comunicacion.getXML("http://localhost:8080/PFC_aviso_localizacion/index.mvl");
	//			res = Comunicacion.getXML("http://127.0.0.1:8080/PFC_aviso_localizacion/index.mvl");
			//res = Comunicacion.getXML("http://192.168.186.16:8080/PFC_aviso_localizacion/index.mvl");
			
			Map<String, String> kvParameters = new HashMap<String, String>();
			String key = getString(R.string.dp_clave_param_idUsuario);
			String valor = ConfiguracionPreferenceActivity.getIdUsuario(this);
			kvParameters.put(key, valor);	
			
			String url = ConfiguracionPreferenceActivity.getDireccionServidor(this)+ getString(R.string.dp_url_datos_personales);
			
			// llamamos al servidor por la url y pasandole el id del usuario: recibiendo un inputsource para parsear.
			respuestaXMLInputSource = Comunicacion.getXML(url, kvParameters);
			
			DatosPersonalesParseador  dpParseador = new DatosPersonalesParseador(this);
			returnDatos = dpParseador.getDatosPersonales(respuestaXMLInputSource);
			
//			if (returnDatos == null) {
//				boolean error = dpParseador.error;
//				String tipoError = dpParseador.tipoError;
//			}
			
			Date fechaActual = new Date();
			returnDatos.setFechaActualizacion( fechaActual.getDate()+"-"+(fechaActual.getMonth()+1)+"-"+(fechaActual.getYear()+1900)+" "+fechaActual.getHours()+":"+fechaActual.getMinutes());
			dpParseador = null;
		} catch (Exception e) {
			returnDatos = null;
		}
		return returnDatos;
		*/
	}	
	
	private boolean almacenarEnvioDatosEnfermedad() {
		return false;
		// TODO: Esta funcion en caso de no exixtir conexion, va a almacenar los datos para enviarlos mas tarde.
	}
		
	private boolean comprobarConexion() {	
		String urlString = ConfiguracionPreferenceActivity.getDireccionServidor(this);
		int timeOut = this.getResources().getInteger(R.integer.TIEMPO_DEL_SPLASH);
		try {
			return Comunicacion.doPing(urlString, timeOut);
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}

}
